/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bank_access;

import mware_lib.IBaseSkeleton;
import mware_lib.IHasSkelleton;

/**
 * @author Gortex
 */
public abstract class AccountImplBase implements IHasSkelleton {

    public abstract void transfer(double amount) throws OverdraftException;

    public abstract double getBalance();

    //gibt das Konkretimplementierte AccountProxy objekt zurück wodrauf transfer und getBalance aufgerufen werden kann
    public static AccountImplBase narrowCast(Object rawObjectRef) {
        String reference = (String) rawObjectRef;
        String[] data = reference.split(":");
        String ip = data[0];
        int port = Integer.parseInt(data[1]);
        return new AccountProxy(ip, port, reference);
    }

    /**
     * hier wird in der Klasse vor der die applikation erbt die methode, die das konkrete 
     * skeleton erzeugt integriert. wenn ein objekt rebind wird dann kann durch den cast dieses 
     * objektes auf IHasSkelleton bei aufruf von generateskeleton genau die richtige klasse angesprochen
     * werden
     * @return 
     */
    @Override
    public IBaseSkeleton generateSkeleton() {
        return new AccountSkeleton(this);
    }
}
